// 1. fetch函数
let login = async (url = '', data = {}) => {
  let rt = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(data),
  })
  return rt.json()
}

let f = async () => {
  let res = await login('http://146.56.230.35:3007/users/login', { username: 'root123', userPassword: 'root123' })
  console.log(res)
}
// f()

// 2. 函数的length属性，非默认值的前面的形参列表个数
let f2 = (a, b = 0, c) => {
  console.log(f2.length) // 1
}

// 3. 函数的arguments属性，name属性
function f3() {
  console.log(f3.name) // f3
  console.log(arguments[0], arguments[1], arguments[2]) // [Arguments] { '0': 1, '1': 2, '2': 3 }
}
// f3(1, 2, 3)

// 4. rest(剩余参数)
let f4 = (...rest) => {
  console.log(rest) // [1, 2, 3]
}
// f4(1, 2, 3)

// 5. 箭头函数
let f5 = (a, b) => ({ a, b })
let res = f5(1, 2)
console.log(res) // { a: 1, b: 2 }

// 6. 箭头函数中的this是定义函数时指定的this作用域
var id = 21
function foo() {
  setTimeout(() => {
    console.log(this) // { id: 20 }
    console.log('id=', this.id) // id= 20
  }, 1000)
}
// foo.call({ id: 20 })

// 7. 箭头函数嵌套时，函数中的this只有一个
let f7 = function () {
  console.log(this) // { id: 20 }
  return () => {
    console.log(this) // { id: 20 }
    return () => {
      console.log(this) // { id: 20 }
      return () => {
        console.log(this) // { id: 20 }
        console.log('id:', this.id)
      }
    }
  }
}
// f7.call({ id: 20 })()()()

// 8. catch的形参列表省略
let f8 = () => {
  try {
    throw '手动抛出的异常'
  } catch {
    console.log('catch:我探查到try块中,程序报错了')
  } finally {
    console.log('finally:程序是否报错我都执行')
  }
  console.log('程序执行结束')
}
f8()
